/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._551;

/**
 *
 * 给定一个字符串来代表一个学生的出勤记录，这个记录仅包含以下三个字符：
 *
 * 'A' : Absent，缺勤
 * 'L' : Late，迟到
 * 'P' : Present，到场
 * 如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。
 *
 * 你需要根据这个学生的出勤记录判断他是否会被奖赏。
 *
 * 示例 1:
 *
 * 输入: "PPALLP"
 * 输出: True
 * 示例 2:
 *
 * 输入: "PPALLL"
 * 输出: False
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._551
 * @ClassName: StudentAttendance
 * @Author: linyaonan
 * @Date: 2020/1/2 13:49
 */
public class StudentAttendance {

    public boolean checkRecord(String s) {
        // 只有一条记录，不论哪一个都可以
        if (s.length() == 1) {
            return true;
        }
        int aCount = 0;
        int nextChar = 'T';
        boolean nextIsL = false;
        for (char c : s.toCharArray()) {
            if (c == 'A') {
                if (aCount == 1) {
                    return false;
                } else {
                    aCount++;
                }
                // 重置上一个字符不是L的状态
                nextIsL = false;
            } else if (c == 'L') {
                if (nextChar == 'L') {
                    if (nextIsL) {
                        return false;
                    } else {
                        nextIsL = true;
                    }
                }
            } else {
                // 重置上一个字符不是L的状态
                nextIsL = false;
            }
            nextChar = c;
        }
        return true;
    }
}
